package cn.lycode.system.mapper;

import cn.lycode.common.core.domain.entity.SysUser;
import cn.lycode.common.core.domain.model.ConditionDTO;
import cn.lycode.system.domain.vo.SysUserVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户表 数据层
 *
 * @author lyCode
 */
public interface SysUserMapper {

    Long selectAllUserCount();

    Long selectNoDeptUserCount();

    SysUser selectUserByUsername(String username);

    SysUser selectUserByPersonNo(String personNo);

    SysUser selectUserByUserId(Long userId);

    SysUserVO selectUserVOByUserId(Long id);

    int countUsername(String username);
    int countUsernameExceptUserId(@Param("username") String username, @Param("userId") Long userId);



    /**
     * 查询用户列表, 全部部门
     */
    List<SysUserVO> selectAllDeptUserVOList(ConditionDTO dto);

    /**
     * 查询用户列表, 未分配部门
     */
    List<SysUserVO> selectNoDeptUserVOList(ConditionDTO dto);

    /**
     * 查询用户列表，按部门 （不带子部门）
     */
    List<SysUserVO> selectUserVOListByDept(ConditionDTO dto);

    /**
     * 查询用户列表，按部门带子部门
     */
    List<SysUserVO> selectUserVOListByDeptAndChildren(ConditionDTO dto);

    /**
     * 插入用户
     */
    int insertUser(SysUser user);

    /**
     * 更新用户
     */
    int updateUser(SysUser sysUser);

    /**
     * 批量删除用户
     */
    void updateUserIsDelete(List<Long> ids);


    void updateUserPwd(@Param("userId") Long userId,@Param("pwd") String sha256Encrypt);

    List<SysUser> selectAllUserList();

    void updateUsersDept(@Param("userIds") List<Long> userIds, @Param("deptId") Long deptId);
}
